<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow-IPC: ipc::transport::Native_socket_stream::Impl Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow-IPC<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow-IPC project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceipc.html">ipc</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1transport.html">transport</a></li><li class="navelem"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html">Native_socket_stream</a></li><li class="navelem"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html">Impl</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="#related">Related Functions</a> &#124;
<a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">ipc::transport::Native_socket_stream::Impl Class Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Internal, non-movable pImpl implementation of <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> class.  
 <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html">native_socket_stream_impl.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for ipc::transport::Native_socket_stream::Impl:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1Native__socket__stream_1_1Impl__inherit__graph.svg" width="310" height="119"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for ipc::transport::Native_socket_stream::Impl:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1Native__socket__stream_1_1Impl__coll__graph.svg" width="1344" height="366"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ad7c2d6c843935c5413d3dd8fbc39d272"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ad7c2d6c843935c5413d3dd8fbc39d272">Impl</a> (flow::log::Logger *logger_ptr, <a class="el" href="namespaceipc_1_1util.html#ae6ac47812a90d1287c61e0b7de7bc4f5">util::String_view</a> nickname_str)</td></tr>
<tr class="memdesc:ad7c2d6c843935c5413d3dd8fbc39d272"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ad7c2d6c843935c5413d3dd8fbc39d272">More...</a><br /></td></tr>
<tr class="separator:ad7c2d6c843935c5413d3dd8fbc39d272"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9aa3d981a2295bd9cfa9e5d3f567cb9"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#af9aa3d981a2295bd9cfa9e5d3f567cb9">Impl</a> (flow::log::Logger *logger_ptr, <a class="el" href="namespaceipc_1_1util.html#ae6ac47812a90d1287c61e0b7de7bc4f5">util::String_view</a> nickname_str, <a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a> &amp;&amp;native_peer_socket_moved)</td></tr>
<tr class="memdesc:af9aa3d981a2295bd9cfa9e5d3f567cb9"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#af9aa3d981a2295bd9cfa9e5d3f567cb9">More...</a><br /></td></tr>
<tr class="separator:af9aa3d981a2295bd9cfa9e5d3f567cb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae50a22a4dd601f009134d2aaa2841eca"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ae50a22a4dd601f009134d2aaa2841eca">Impl</a> (<a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html">sync_io::Native_socket_stream</a> &amp;&amp;sync_io_core_in_peer_state_moved)</td></tr>
<tr class="memdesc:ae50a22a4dd601f009134d2aaa2841eca"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ae50a22a4dd601f009134d2aaa2841eca">More...</a><br /></td></tr>
<tr class="separator:ae50a22a4dd601f009134d2aaa2841eca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0bc4f6f4dfa20d1c1902f1da85f637b3"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a0bc4f6f4dfa20d1c1902f1da85f637b3">~Impl</a> ()</td></tr>
<tr class="memdesc:a0bc4f6f4dfa20d1c1902f1da85f637b3"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a0bc4f6f4dfa20d1c1902f1da85f637b3">More...</a><br /></td></tr>
<tr class="separator:a0bc4f6f4dfa20d1c1902f1da85f637b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab1d81ebbd3fe32d20007c408c2693c93"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ab1d81ebbd3fe32d20007c408c2693c93">nickname</a> () const</td></tr>
<tr class="memdesc:ab1d81ebbd3fe32d20007c408c2693c93"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ab1d81ebbd3fe32d20007c408c2693c93">More...</a><br /></td></tr>
<tr class="separator:ab1d81ebbd3fe32d20007c408c2693c93"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4706d150ea840300dd23edbf71ed64b4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a4706d150ea840300dd23edbf71ed64b4">sync_connect</a> (const <a class="el" href="namespaceipc_1_1transport.html#a33de1c256addb3964b839dc2dd407d24">Shared_name</a> &amp;absolute_name, <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *err_code)</td></tr>
<tr class="memdesc:a4706d150ea840300dd23edbf71ed64b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a4706d150ea840300dd23edbf71ed64b4">More...</a><br /></td></tr>
<tr class="separator:a4706d150ea840300dd23edbf71ed64b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49473cdfdb7b33d42c53d8b029692a58"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1util_1_1Process__credentials.html">util::Process_credentials</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a49473cdfdb7b33d42c53d8b029692a58">remote_peer_process_credentials</a> (<a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *err_code) const</td></tr>
<tr class="memdesc:a49473cdfdb7b33d42c53d8b029692a58"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a49473cdfdb7b33d42c53d8b029692a58">More...</a><br /></td></tr>
<tr class="separator:a49473cdfdb7b33d42c53d8b029692a58"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a356082fb50487830a83301cf12836ede"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a356082fb50487830a83301cf12836ede">send_meta_blob_max_size</a> () const</td></tr>
<tr class="memdesc:a356082fb50487830a83301cf12836ede"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a356082fb50487830a83301cf12836ede">More...</a><br /></td></tr>
<tr class="separator:a356082fb50487830a83301cf12836ede"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a056a63cf017ac7a1f41d584b66acbfc7"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a056a63cf017ac7a1f41d584b66acbfc7">send_blob_max_size</a> () const</td></tr>
<tr class="memdesc:a056a63cf017ac7a1f41d584b66acbfc7"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a056a63cf017ac7a1f41d584b66acbfc7">More...</a><br /></td></tr>
<tr class="separator:a056a63cf017ac7a1f41d584b66acbfc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b6672d56734dd78fe2c4ab5c6472b18"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a9b6672d56734dd78fe2c4ab5c6472b18">send_native_handle</a> (<a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a> hndl_or_null, const <a class="el" href="namespaceipc_1_1util.html#ae0be7edba7e30ffa3f8b742af621f2ab">util::Blob_const</a> &amp;meta_blob, <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *err_code)</td></tr>
<tr class="memdesc:a9b6672d56734dd78fe2c4ab5c6472b18"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a9b6672d56734dd78fe2c4ab5c6472b18">More...</a><br /></td></tr>
<tr class="separator:a9b6672d56734dd78fe2c4ab5c6472b18"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15b8a1c70ca6bec7fc7dad87adf7f348"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a15b8a1c70ca6bec7fc7dad87adf7f348">send_blob</a> (const <a class="el" href="namespaceipc_1_1util.html#ae0be7edba7e30ffa3f8b742af621f2ab">util::Blob_const</a> &amp;blob, <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *err_code)</td></tr>
<tr class="memdesc:a15b8a1c70ca6bec7fc7dad87adf7f348"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a15b8a1c70ca6bec7fc7dad87adf7f348">More...</a><br /></td></tr>
<tr class="separator:a15b8a1c70ca6bec7fc7dad87adf7f348"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba41a8c94c5bc335494cd7bb534f1c11"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#aba41a8c94c5bc335494cd7bb534f1c11">async_end_sending</a> (flow::async::Task_asio_err &amp;&amp;on_done_func)</td></tr>
<tr class="memdesc:aba41a8c94c5bc335494cd7bb534f1c11"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#aba41a8c94c5bc335494cd7bb534f1c11">More...</a><br /></td></tr>
<tr class="separator:aba41a8c94c5bc335494cd7bb534f1c11"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a39c3a466e4f61e20dfaa8d9b66266f61"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a39c3a466e4f61e20dfaa8d9b66266f61">end_sending</a> ()</td></tr>
<tr class="memdesc:a39c3a466e4f61e20dfaa8d9b66266f61"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a39c3a466e4f61e20dfaa8d9b66266f61">More...</a><br /></td></tr>
<tr class="separator:a39c3a466e4f61e20dfaa8d9b66266f61"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae5759a20fc2b1e92c2c23a5af7a5efc1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ae5759a20fc2b1e92c2c23a5af7a5efc1">auto_ping</a> (<a class="el" href="namespaceipc_1_1util.html#ac66141280c3b7295a86b65209f31cc58">util::Fine_duration</a> period)</td></tr>
<tr class="memdesc:ae5759a20fc2b1e92c2c23a5af7a5efc1"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ae5759a20fc2b1e92c2c23a5af7a5efc1">More...</a><br /></td></tr>
<tr class="separator:ae5759a20fc2b1e92c2c23a5af7a5efc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae599fae31c48348f10341c6c70e343e7"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ae599fae31c48348f10341c6c70e343e7">receive_meta_blob_max_size</a> () const</td></tr>
<tr class="memdesc:ae599fae31c48348f10341c6c70e343e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ae599fae31c48348f10341c6c70e343e7">More...</a><br /></td></tr>
<tr class="separator:ae599fae31c48348f10341c6c70e343e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ca2349b422211f699c71b3e15dcbf31"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a7ca2349b422211f699c71b3e15dcbf31">receive_blob_max_size</a> () const</td></tr>
<tr class="memdesc:a7ca2349b422211f699c71b3e15dcbf31"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a7ca2349b422211f699c71b3e15dcbf31">More...</a><br /></td></tr>
<tr class="separator:a7ca2349b422211f699c71b3e15dcbf31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a472560960a22993f75c87bea962104bc"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a472560960a22993f75c87bea962104bc">async_receive_native_handle</a> (<a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a> *target_hndl, const <a class="el" href="namespaceipc_1_1util.html#a6cb62ae434900f3a8915b33ec5d61a96">util::Blob_mutable</a> &amp;target_meta_blob, flow::async::Task_asio_err_sz &amp;&amp;on_done_func)</td></tr>
<tr class="memdesc:a472560960a22993f75c87bea962104bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a472560960a22993f75c87bea962104bc">More...</a><br /></td></tr>
<tr class="separator:a472560960a22993f75c87bea962104bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89edcfd79bbd088c6900fcfa026f07bf"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a89edcfd79bbd088c6900fcfa026f07bf">async_receive_blob</a> (const <a class="el" href="namespaceipc_1_1util.html#a6cb62ae434900f3a8915b33ec5d61a96">util::Blob_mutable</a> &amp;target_blob, flow::async::Task_asio_err_sz &amp;&amp;on_done_func)</td></tr>
<tr class="memdesc:a89edcfd79bbd088c6900fcfa026f07bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a89edcfd79bbd088c6900fcfa026f07bf">More...</a><br /></td></tr>
<tr class="separator:a89edcfd79bbd088c6900fcfa026f07bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3103ec6899bfb6f945d970d8c4114338"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a3103ec6899bfb6f945d970d8c4114338">idle_timer_run</a> (<a class="el" href="namespaceipc_1_1util.html#ac66141280c3b7295a86b65209f31cc58">util::Fine_duration</a> timeout)</td></tr>
<tr class="memdesc:a3103ec6899bfb6f945d970d8c4114338"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a3103ec6899bfb6f945d970d8c4114338">More...</a><br /></td></tr>
<tr class="separator:a3103ec6899bfb6f945d970d8c4114338"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-methods" name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:ae6713aa742cee52ae9ca16156d1f8599"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ae6713aa742cee52ae9ca16156d1f8599">Impl</a> (<a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html">sync_io::Native_socket_stream</a> &amp;&amp;sync_io_core_moved, std::nullptr_t tag)</td></tr>
<tr class="memdesc:ae6713aa742cee52ae9ca16156d1f8599"><td class="mdescLeft">&#160;</td><td class="mdescRight">Core delegated-to ctor: does everything except <code>m_sync_io.start_*_ops()</code>.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ae6713aa742cee52ae9ca16156d1f8599">More...</a><br /></td></tr>
<tr class="separator:ae6713aa742cee52ae9ca16156d1f8599"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:a4a7ab0a981614724b559b38634634d8a"><td class="memItemLeft" align="right" valign="top">boost::movelib::unique_ptr&lt; flow::async::Single_thread_task_loop &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a4a7ab0a981614724b559b38634634d8a">m_worker</a></td></tr>
<tr class="memdesc:a4a7ab0a981614724b559b38634634d8a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Single-thread worker pool for all internal async work in both directions.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a4a7ab0a981614724b559b38634634d8a">More...</a><br /></td></tr>
<tr class="separator:a4a7ab0a981614724b559b38634634d8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e3d15efe152af3d5de7bed2a094b885"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html">sync_io::Native_socket_stream</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885">m_sync_io</a></td></tr>
<tr class="memdesc:a8e3d15efe152af3d5de7bed2a094b885"><td class="mdescLeft">&#160;</td><td class="mdescRight">The core <code><a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a></code> engine, implementing the <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> pattern (see <a class="el" href="namespaceipc_1_1util_1_1sync__io.html" title="Contains common code, as well as important explanatory documentation in the following text,...">util::sync_io</a> doc header).  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885">More...</a><br /></td></tr>
<tr class="separator:a8e3d15efe152af3d5de7bed2a094b885"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4689db8dfd0be14695e93d8760b23ed"><td class="memItemLeft" align="right" valign="top">std::optional&lt; <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__sender.html">sync_io::Async_adapter_sender</a>&lt; decltype(<a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885">m_sync_io</a>)&gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ad4689db8dfd0be14695e93d8760b23ed">m_snd_sync_io_adapter</a></td></tr>
<tr class="memdesc:ad4689db8dfd0be14695e93d8760b23ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Null until PEER state, this handles ~all send-ops logic in that state.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ad4689db8dfd0be14695e93d8760b23ed">More...</a><br /></td></tr>
<tr class="separator:ad4689db8dfd0be14695e93d8760b23ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d006ccbd86681405447a5f2033ad2ca"><td class="memItemLeft" align="right" valign="top">std::optional&lt; <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__receiver.html">sync_io::Async_adapter_receiver</a>&lt; decltype(<a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885">m_sync_io</a>)&gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a9d006ccbd86681405447a5f2033ad2ca">m_rcv_sync_io_adapter</a></td></tr>
<tr class="memdesc:a9d006ccbd86681405447a5f2033ad2ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Null until PEER state, this handles ~all receive-ops logic in that state.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a9d006ccbd86681405447a5f2033ad2ca">More...</a><br /></td></tr>
<tr class="separator:a9d006ccbd86681405447a5f2033ad2ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="related" name="related"></a>
Related Functions</h2></td></tr>
<tr><td class="ititle" colspan="2"><p >(Note that these are not member functions.) </p>
</td></tr>
<tr class="memitem:a33231b969171a9103cd0a319ea10278b"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a33231b969171a9103cd0a319ea10278b">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html">Native_socket_stream::Impl</a> &amp;val)</td></tr>
<tr class="memdesc:a33231b969171a9103cd0a319ea10278b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of the given <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html" title="Internal, non-movable pImpl implementation of Native_socket_stream class.">Native_socket_stream::Impl</a> to the given <code>ostream</code>.  <a href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a33231b969171a9103cd0a319ea10278b">More...</a><br /></td></tr>
<tr class="separator:a33231b969171a9103cd0a319ea10278b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Internal, non-movable pImpl implementation of <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> class. </p>
<p >In and of itself it would have been directly and publicly usable; however <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> adds move semantics which are essential to cooperation with <a class="el" href="classipc_1_1transport_1_1Native__socket__stream__acceptor.html" title="A server object that binds to a Shared_name and listens for incoming Native_socket_stream connect att...">Native_socket_stream_acceptor</a> and overall consistency with the rest of <a class="el" href="namespaceipc_1_1transport.html" title="Flow-IPC module providing transmission of structured messages and/or low-level blobs (and more) betwe...">ipc::transport</a> API and, arguably, boost.asio API design.</p>
<dl class="section see"><dt>See also</dt><dd>All discussion of the public API is in <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> doc header; that class forwards to this one. All discussion of pImpl-related notions is also there. See that doc header first please. Then come back here.</dd></dl>
<h2><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html" title="Internal, non-movable pImpl implementation of Native_socket_stream class.">Impl</a> design </h2>
<h3>Intro / history</h3>
<p ><a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html" title="Internal, non-movable pImpl implementation of Native_socket_stream class.">Native_socket_stream::Impl</a> is, one could argue, the core class of this entire library, Flow-IPC. Beyond that, even the closest alternatives (which, in the first place, cannot do some of what it can &ndash; namely the <code>Blob_stream_mq_*</code> guys cannot transmit native handles) tend to use many of the same techniques. So, like, this impl design is important &ndash; for performance on behalf of the <a class="el" href="namespaceipc_1_1transport.html" title="Flow-IPC module providing transmission of structured messages and/or low-level blobs (and more) betwe...">ipc::transport</a> use and <a class="el" href="namespaceipc_1_1session.html" title="Flow-IPC module providing the broad lifecycle and shared-resource organization – via the session conc...">ipc::session</a> internals (which bases its session master channel on a single-<code><a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a></code> <a class="el" href="classipc_1_1transport_1_1Channel.html" title="Peer to a bundle of 1-2 full-duplex pipe(s), one for transmitting unstructured binary blobs; the othe...">Channel</a>); and as a conceptual template for how various other things are implemented (at least in part).</p>
<p >Truthfully, in some cases historically speaking I (ygoldfel) tweaked aspects of the concept APIs it implements (<a class="el" href="classipc_1_1transport_1_1Native__handle__sender.html" title="A documentation-only concept defining the behavior of an object capable of reliably/in-order sending ...">Native_handle_sender</a>, <a class="el" href="classipc_1_1transport_1_1Native__handle__receiver.html" title="A documentation-only concept defining the behavior of an object capable of reliably/in-order receivin...">Native_handle_receiver</a>, <a class="el" href="classipc_1_1transport_1_1Blob__sender.html" title="A documentation-only concept defining the behavior of an object capable of reliably/in-order sending ...">Blob_sender</a>, <a class="el" href="classipc_1_1transport_1_1Blob__receiver.html" title="A documentation-only concept defining the behavior of an object capable of reliably/in-order receivin...">Blob_receiver</a>) based on lessons learned in writing this impl. (Yes, it "should" be the other way around &ndash; concept should be maximally useful, impl should fulfill it, period &ndash; but I am just being real.)</p>
<p >That said: at some point during the initial development of Flow-IPC, the <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> pattern emerged as a necessary alternative API &ndash; alternative to the async-I/O pattern of <code>*_sender</code> and <code>*_receiver</code> concepts. (See <a class="el" href="namespaceipc_1_1util_1_1sync__io.html" title="Contains common code, as well as important explanatory documentation in the following text,...">util::sync_io</a> doc header. It describes the pattern and the rationale for it.) It was of course possible, at that point, to have the 2 be decoupled: <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> (async-I/O pattern) is implemented like so, and <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html" title="Implements both sync_io::Native_handle_sender and sync_io::Native_handle_receiver concepts by using a...">sync_io::Native_socket_stream</a> (<code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> pattern) is implemented separate like <em>so</em>. Historically speaking, <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> was already written and working great, with a stable API and insides; but <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html" title="Implements both sync_io::Native_handle_sender and sync_io::Native_handle_receiver concepts by using a...">sync_io::Native_socket_stream</a> didn't exist and needed to be written &ndash; in fact, the 1st <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> guy to be written.</p>
<p >Naturally I scrapped the idea of simply writing the new guy from scratch and leaving existing guy as-is. Instead I moved the relevant aspects of the old guy into the new guy, and (re)wrote the formerly-old guy (that's the present class <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html" title="Internal, non-movable pImpl implementation of Native_socket_stream class.">Native_socket_stream::Impl</a>) <em>in terms of</em> the new guy. (I then repeated this for its peers <a class="el" href="classipc_1_1transport_1_1Blob__stream__mq__sender.html" title="Implements Blob_sender concept by using an adopted Persistent_mq_handle MQ handle to an MQ (message q...">Blob_stream_mq_sender</a> &ndash; which is like <code>*this</code> but for blobs-only and outgoing-only &ndash; and <a class="el" href="classipc_1_1transport_1_1Blob__stream__mq__receiver.html" title="Implements Blob_receiver concept by using an adopted Persistent_mq_handle MQ handle to an MQ (message...">Blob_stream_mq_receiver</a>, which is (same) but incoming-only.) Any other approach would have resulted in 2x the code and 2x the bug potential and maintenance going forward. (Plus it allowed for the nifty concept of being able to construct a <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> from a <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html" title="Implements both sync_io::Native_handle_sender and sync_io::Native_handle_receiver concepts by using a...">sync_io::Native_socket_stream</a> "core"; this was immediately standardized to all the relevant concepts.) Note &ndash; however &ndash; that as <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> underwent this bifurcation into <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> and <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html" title="Implements both sync_io::Native_handle_sender and sync_io::Native_handle_receiver concepts by using a...">sync_io::Native_socket_stream</a>, its API did not change <em>at all</em> (modulo the addition of the <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code>-core-subsuming constructor).</p>
<p >As a result &ndash; whether that was a good or bad design (I say, good) &ndash; at least the following is true: Understanding the impl of <code>*this</code> class means: understanding the <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> core <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html" title="Implements both sync_io::Native_handle_sender and sync_io::Native_handle_receiver concepts by using a...">sync_io::Native_socket_stream</a> <em>as a black box</em> (!); and then understanding the (actually quite limited) work necessary to build on top of that to provide the desired API (as largedly mandated by <a class="el" href="classipc_1_1transport_1_1Native__handle__sender.html" title="A documentation-only concept defining the behavior of an object capable of reliably/in-order sending ...">Native_handle_sender</a> and <a class="el" href="classipc_1_1transport_1_1Native__handle__receiver.html" title="A documentation-only concept defining the behavior of an object capable of reliably/in-order receivin...">Native_handle_receiver</a> concept APIs). Moreover, given a <code>sync_op::_*sender</code> the PEER-state logic for <code>*_sender</code> is always the same; and similarly for <code>*_receiver</code>. Because of that I factored out this adapter logic into <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__sender.html" title="Internal-use type that adapts a given PEER-state sync_io::Native_handle_sender or sync_io::Blob_sende...">sync_io::Async_adapter_sender</a> and <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__receiver.html" title="Internal-use type that adapts a given PEER-state sync_io::Native_handle_receiver or sync_io::Blob_rec...">sync_io::Async_adapter_receiver</a>; so 49.5% of <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> PEER-state logic forwards to <code>Async_adapter_sender</code>, 49.5% to <code>Async_adapter_receiver</code>; and accordingly 99% of each of <code>Blob_stream_mq_sender/receiver</code> forwards to <code>Async_adapter_sender/receiver</code>. If more sender/receiver types were to be written they could do the same. So only the <code>sync_io::X</code> core is different.</p>
<p >So... actually... it is pretty straightforward now! Pre-decoupling it was much more of a challenge. Of course, you may want to change its insides; in that case you might need to get into <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream_1_1Impl.html" title="Internal, non-movable pImpl implementation of sync_io::Native_socket_stream class.">sync_io::Native_socket_stream::Impl</a>. Though, that guy is simpler too, as its mission is much reduced &ndash; no more "thread W" or async-handlers to invoke.</p>
<p >That said you'll need to in fact understand how <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html" title="Implements both sync_io::Native_handle_sender and sync_io::Native_handle_receiver concepts by using a...">sync_io::Native_socket_stream</a> (as a black box) works which means getting comfortable with the <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> pattern. (See <a class="el" href="namespaceipc_1_1util_1_1sync__io.html" title="Contains common code, as well as important explanatory documentation in the following text,...">util::sync_io</a> doc header.)</p>
<h3>Threads and thread nomenclature</h3>
<p ><em>Thread U</em> refers to the user "meta-thread" from which the public APIs are invoked after construction. Since ("Thread safety" in <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> doc header) they are to protect from any concurrent API calls on a given <code>*this</code>, all access to the APIs can be thought of as coming from a single "thread" U. There is a caveat: User-supplied completion handler callbacks are explicitly said to be invoked from an unspecified thread that is <em>not</em> U, and the user is generally explicitly allowed to call public APIs directly from these callbacks. <em>Thread W</em> (see below) is the "unspecified thread that is not U" &ndash; the worker thread. Therefore, at the top of each public API body, we write the internal comment "We are in thread U *or* thread W (but always
serially)." or similar.</p>
<p >Generally speaking the threads are used as follows internally by <code>*this</code>:</p><ul>
<li>User invokes <code>this-&gt;f()</code> in thread U. We ask, immediately if possible, for <code>m_sync_io</code> (the <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> core) to finish <code>m_sync_io.f()</code> as synchronously as it can. If it can, wonderful. If it cannot, it will (per <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> pattern) ask to async-wait on an event (readable or writable) on some FD of its choice. We <code>.async_wait(F)</code> on it &ndash; and as a result, on ready event, <code>F()</code> executes in thread W.<ul>
<li>In thread W, <code>F()</code> eventually executes, so <em>within</em> <code>F()</code> we (1) tell <code>m_sync_io</code> of the ready event by calling into an <code>m_sync_io</code> API.</li>
</ul>
</li>
<li>Into thread W, we <code>post()</code> user completion handlers, namely from <code>async_receive_*()</code> and <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#aba41a8c94c5bc335494cd7bb534f1c11" title="See Native_socket_stream counterpart.">async_end_sending()</a>. As promised that's the "unspecified thread" from which we do this.</li>
</ul>
<p >The thread-W <code>post()</code>ing does not require locking. It does need to happen in a separate boost.asio task, as otherwise recursive mayhem can occur (we want to do A-B synchronously, but then between A and B they invoke <code>this-&gt;something()</code>, which starts something else =&gt; mayhem).</p>
<p >However: the other 2 bullet points (first one and the sub-bullet under it) do operate on the same data from threads U and W potentially concurrently. (Note: usually it is not necessary to engage thread W, except for receive-ops. A receive-op may indeed commonly encounter would-block, simply because no data have arrived yet. Otherwise: For send-ops, <code>m_sync_io</code> will synchronously succeed in each send, including that of graceful-close due to <code>*end_sending()</code>, unless the kernel buffer is full and gives would-block &ndash; only if the opposing side is not reading in timely fashion. The sparing use of multi-threading, instead completing stuff synchronously whenever humanly possible, is a good property of this design that uses a <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> core.)</p>
<p >That brings us to:</p>
<h3>Locking</h3>
<p >All receive logic is bracketed by a lock, <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__receiver.html#a113a43c175209f7e3293f75ab4bcd794" title="Protects m_user_request, m_pending_user_requests_q, and receive-ops data of m_sync_io.">sync_io::Async_adapter_receiver::m_mutex</a>. Lock contention occurs only if more <code>async_receive_*()</code> requests are made while one is in progress. This is, we guess, relatively rare.</p>
<p >All send logic is similarly bracketed by a different lock, <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__sender.html#a801d13765438ce9f2963cf59981cd7c0" title="Protects m_end_sending_on_done_func_or_empty and, more importantly, send-ops data of m_sync_io.">sync_io::Async_adapter_sender::m_mutex</a>. Lock contention occurs only if (1) <code>send_*()</code> (or, one supposes, <code>*end_sending()</code>, but that's negligible) encounters would-block inside <code>m_sync_io.send_*()</code>; <em>and</em> (2) more <code>send_*()</code> (+ <code>*end_sending()</code>) requests are made during this state. (1) should be infrequent-to-non-existent assuming civilized opposing-side receiving behavior. Therefore lock contention should be rare.</p>
<h3>Outgoing-direction impl design</h3>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__sender.html" title="Internal-use type that adapts a given PEER-state sync_io::Native_handle_sender or sync_io::Blob_sende...">sync_io::Async_adapter_sender</a> where all that is encapsulated.</dd></dl>
<h3>Incoming-direction impl design</h3>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__receiver.html" title="Internal-use type that adapts a given PEER-state sync_io::Native_handle_receiver or sync_io::Blob_rec...">sync_io::Async_adapter_receiver</a> where all that is encapsulated. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00148">148</a> of file <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html">native_socket_stream_impl.hpp</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="ad7c2d6c843935c5413d3dd8fbc39d272" name="ad7c2d6c843935c5413d3dd8fbc39d272"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad7c2d6c843935c5413d3dd8fbc39d272">&#9670;&nbsp;</a></span>Impl() <span class="overload">[1/4]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">ipc::transport::Native_socket_stream::Impl::Impl </td>
          <td>(</td>
          <td class="paramtype">flow::log::Logger *&#160;</td>
          <td class="paramname"><em>logger_ptr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceipc_1_1util.html#ae6ac47812a90d1287c61e0b7de7bc4f5">util::String_view</a>&#160;</td>
          <td class="paramname"><em>nickname_str</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">logger_ptr</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
    <tr><td class="paramname">nickname_str</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00065">65</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<a id="af9aa3d981a2295bd9cfa9e5d3f567cb9" name="af9aa3d981a2295bd9cfa9e5d3f567cb9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af9aa3d981a2295bd9cfa9e5d3f567cb9">&#9670;&nbsp;</a></span>Impl() <span class="overload">[2/4]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">ipc::transport::Native_socket_stream::Impl::Impl </td>
          <td>(</td>
          <td class="paramtype">flow::log::Logger *&#160;</td>
          <td class="paramname"><em>logger_ptr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceipc_1_1util.html#ae6ac47812a90d1287c61e0b7de7bc4f5">util::String_view</a>&#160;</td>
          <td class="paramname"><em>nickname_str</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>native_peer_socket_moved</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">logger_ptr</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
    <tr><td class="paramname">native_peer_socket_moved</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
    <tr><td class="paramname">nickname_str</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00072">72</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

<p class="reference">References <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00453">m_rcv_sync_io_adapter</a>, <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00438">m_snd_sync_io_adapter</a>, <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00419">m_sync_io</a>, <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00401">m_worker</a>, and <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00220">nickname()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1Native__socket__stream_1_1Impl_af9aa3d981a2295bd9cfa9e5d3f567cb9_cgraph.svg" width="372" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="ae50a22a4dd601f009134d2aaa2841eca" name="ae50a22a4dd601f009134d2aaa2841eca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae50a22a4dd601f009134d2aaa2841eca">&#9670;&nbsp;</a></span>Impl() <span class="overload">[3/4]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">ipc::transport::Native_socket_stream::Impl::Impl </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html">sync_io::Native_socket_stream</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>sync_io_core_in_peer_state_moved</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">sync_io_core_in_peer_state_moved</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00088">88</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

<p class="reference">References <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00453">m_rcv_sync_io_adapter</a>, <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00438">m_snd_sync_io_adapter</a>, <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00419">m_sync_io</a>, and <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00401">m_worker</a>.</p>

</div>
</div>
<a id="a0bc4f6f4dfa20d1c1902f1da85f637b3" name="a0bc4f6f4dfa20d1c1902f1da85f637b3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0bc4f6f4dfa20d1c1902f1da85f637b3">&#9670;&nbsp;</a></span>~Impl()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">ipc::transport::Native_socket_stream::Impl::~Impl </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<p >The unspecified thread from which remaining handlers are potentially invoked, as of this writing, is not the usual thread W. There is rationale discussion and detail in the body, but it seemed prudent to point it out here. </p>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00104">104</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__socket__stream_8cpp_source.html#l00084">ipc::transport::Native_socket_stream::nickname()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1Native__socket__stream_1_1Impl_a0bc4f6f4dfa20d1c1902f1da85f637b3_cgraph.svg" width="590" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="ae6713aa742cee52ae9ca16156d1f8599" name="ae6713aa742cee52ae9ca16156d1f8599"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae6713aa742cee52ae9ca16156d1f8599">&#9670;&nbsp;</a></span>Impl() <span class="overload">[4/4]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">ipc::transport::Native_socket_stream::Impl::Impl </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html">sync_io::Native_socket_stream</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>sync_io_core_moved</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::nullptr_t&#160;</td>
          <td class="paramname"><em>tag</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Core delegated-to ctor: does everything except <code>m_sync_io.start_*_ops()</code>. </p>
<p >Delegating ctor shall do nothing further if starting in NULL state; else (starting directly in PEER state) it will delegate <code>m_sync_io.start_receive/send_*_ops()</code> to <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ad4689db8dfd0be14695e93d8760b23ed" title="Null until PEER state, this handles ~all send-ops logic in that state.">m_snd_sync_io_adapter</a> and <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a9d006ccbd86681405447a5f2033ad2ca" title="Null until PEER state, this handles ~all receive-ops logic in that state.">m_rcv_sync_io_adapter</a> which it will initialize.</p>
<p >Therefore if entering PEER state due to successful <code>*_connect()</code>, <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ad4689db8dfd0be14695e93d8760b23ed" title="Null until PEER state, this handles ~all send-ops logic in that state.">m_snd_sync_io_adapter</a> and <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a9d006ccbd86681405447a5f2033ad2ca" title="Null until PEER state, this handles ~all receive-ops logic in that state.">m_rcv_sync_io_adapter</a> will be created at that time.</p>
<p ><code>get_logger()</code> and <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ab1d81ebbd3fe32d20007c408c2693c93" title="See Native_socket_stream counterpart.">nickname()</a> values are obtained from <code>sync_io_core_moved</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">sync_io_core_moved</td><td>A freshly constructed <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html" title="Implements both sync_io::Native_handle_sender and sync_io::Native_handle_receiver concepts by using a...">sync_io::Native_socket_stream</a> subsumed by <code>*this</code> (this object becomes as-if-default-cted). It can be in NULL or PEER state. </td></tr>
    <tr><td class="paramname">tag</td><td>Ctor-selecting tag. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00033">33</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

<p class="reference">References <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00419">m_sync_io</a>, <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00401">m_worker</a>, and <a class="el" href="sync__io_2native__socket__stream_8hpp_source.html#l00771">ipc::transport::sync_io::Native_socket_stream::replace_event_wait_handles()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1Native__socket__stream_1_1Impl_ae6713aa742cee52ae9ca16156d1f8599_cgraph.svg" width="911" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="aba41a8c94c5bc335494cd7bb534f1c11" name="aba41a8c94c5bc335494cd7bb534f1c11"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba41a8c94c5bc335494cd7bb534f1c11">&#9670;&nbsp;</a></span>async_end_sending()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ipc::transport::Native_socket_stream::Impl::async_end_sending </td>
          <td>(</td>
          <td class="paramtype">flow::async::Task_asio_err &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_done_func</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">on_done_func</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00254">254</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<a id="a89edcfd79bbd088c6900fcfa026f07bf" name="a89edcfd79bbd088c6900fcfa026f07bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a89edcfd79bbd088c6900fcfa026f07bf">&#9670;&nbsp;</a></span>async_receive_blob()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ipc::transport::Native_socket_stream::Impl::async_receive_blob </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespaceipc_1_1util.html#a6cb62ae434900f3a8915b33ec5d61a96">util::Blob_mutable</a> &amp;&#160;</td>
          <td class="paramname"><em>target_blob</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">flow::async::Task_asio_err_sz &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_done_func</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">target_blob</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
    <tr><td class="paramname">on_done_func</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00291">291</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<a id="a472560960a22993f75c87bea962104bc" name="a472560960a22993f75c87bea962104bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a472560960a22993f75c87bea962104bc">&#9670;&nbsp;</a></span>async_receive_native_handle()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ipc::transport::Native_socket_stream::Impl::async_receive_native_handle </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a> *&#160;</td>
          <td class="paramname"><em>target_hndl</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="namespaceipc_1_1util.html#a6cb62ae434900f3a8915b33ec5d61a96">util::Blob_mutable</a> &amp;&#160;</td>
          <td class="paramname"><em>target_meta_blob</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">flow::async::Task_asio_err_sz &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_done_func</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">target_hndl</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
    <tr><td class="paramname">target_meta_blob</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
    <tr><td class="paramname">on_done_func</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00280">280</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<a id="ae5759a20fc2b1e92c2c23a5af7a5efc1" name="ae5759a20fc2b1e92c2c23a5af7a5efc1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae5759a20fc2b1e92c2c23a5af7a5efc1">&#9670;&nbsp;</a></span>auto_ping()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ipc::transport::Native_socket_stream::Impl::auto_ping </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceipc_1_1util.html#ac66141280c3b7295a86b65209f31cc58">util::Fine_duration</a>&#160;</td>
          <td class="paramname"><em>period</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">period</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00261">261</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<a id="a39c3a466e4f61e20dfaa8d9b66266f61" name="a39c3a466e4f61e20dfaa8d9b66266f61"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a39c3a466e4f61e20dfaa8d9b66266f61">&#9670;&nbsp;</a></span>end_sending()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ipc::transport::Native_socket_stream::Impl::end_sending </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="section return"><dt>Returns</dt><dd>Ditto. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00247">247</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__socket__stream_8hpp_source.html#l00838">ipc::transport::Native_socket_stream::async_end_sending()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1Native__socket__stream_1_1Impl_a39c3a466e4f61e20dfaa8d9b66266f61_cgraph.svg" width="732" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a3103ec6899bfb6f945d970d8c4114338" name="a3103ec6899bfb6f945d970d8c4114338"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3103ec6899bfb6f945d970d8c4114338">&#9670;&nbsp;</a></span>idle_timer_run()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ipc::transport::Native_socket_stream::Impl::idle_timer_run </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceipc_1_1util.html#ac66141280c3b7295a86b65209f31cc58">util::Fine_duration</a>&#160;</td>
          <td class="paramname"><em>timeout</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">timeout</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00299">299</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<a id="ab1d81ebbd3fe32d20007c408c2693c93" name="ab1d81ebbd3fe32d20007c408c2693c93"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab1d81ebbd3fe32d20007c408c2693c93">&#9670;&nbsp;</a></span>nickname()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const std::string &amp; ipc::transport::Native_socket_stream::Impl::nickname </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00220">220</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00072">Impl()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1Native__socket__stream_1_1Impl_ab1d81ebbd3fe32d20007c408c2693c93_icgraph.svg" width="372" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a7ca2349b422211f699c71b3e15dcbf31" name="a7ca2349b422211f699c71b3e15dcbf31"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ca2349b422211f699c71b3e15dcbf31">&#9670;&nbsp;</a></span>receive_blob_max_size()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t ipc::transport::Native_socket_stream::Impl::receive_blob_max_size </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00311">311</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<a id="ae599fae31c48348f10341c6c70e343e7" name="ae599fae31c48348f10341c6c70e343e7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae599fae31c48348f10341c6c70e343e7">&#9670;&nbsp;</a></span>receive_meta_blob_max_size()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t ipc::transport::Native_socket_stream::Impl::receive_meta_blob_max_size </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00306">306</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__socket__stream_8cpp_source.html#l00135">ipc::transport::Native_socket_stream::receive_blob_max_size()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1Native__socket__stream_1_1Impl_ae599fae31c48348f10341c6c70e343e7_cgraph.svg" width="579" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a49473cdfdb7b33d42c53d8b029692a58" name="a49473cdfdb7b33d42c53d8b029692a58"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a49473cdfdb7b33d42c53d8b029692a58">&#9670;&nbsp;</a></span>remote_peer_process_credentials()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1util_1_1Process__credentials.html">util::Process_credentials</a> ipc::transport::Native_socket_stream::Impl::remote_peer_process_credentials </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *&#160;</td>
          <td class="paramname"><em>err_code</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">err_code</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00215">215</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<a id="a15b8a1c70ca6bec7fc7dad87adf7f348" name="a15b8a1c70ca6bec7fc7dad87adf7f348"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15b8a1c70ca6bec7fc7dad87adf7f348">&#9670;&nbsp;</a></span>send_blob()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ipc::transport::Native_socket_stream::Impl::send_blob </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespaceipc_1_1util.html#ae0be7edba7e30ffa3f8b742af621f2ab">util::Blob_const</a> &amp;&#160;</td>
          <td class="paramname"><em>blob</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *&#160;</td>
          <td class="paramname"><em>err_code</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">blob</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
    <tr><td class="paramname">err_code</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00232">232</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<a id="a056a63cf017ac7a1f41d584b66acbfc7" name="a056a63cf017ac7a1f41d584b66acbfc7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a056a63cf017ac7a1f41d584b66acbfc7">&#9670;&nbsp;</a></span>send_blob_max_size()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t ipc::transport::Native_socket_stream::Impl::send_blob_max_size </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00273">273</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<a id="a356082fb50487830a83301cf12836ede" name="a356082fb50487830a83301cf12836ede"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a356082fb50487830a83301cf12836ede">&#9670;&nbsp;</a></span>send_meta_blob_max_size()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t ipc::transport::Native_socket_stream::Impl::send_meta_blob_max_size </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00268">268</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__socket__stream_8cpp_source.html#l00104">ipc::transport::Native_socket_stream::send_blob_max_size()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1Native__socket__stream_1_1Impl_a356082fb50487830a83301cf12836ede_cgraph.svg" width="583" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a9b6672d56734dd78fe2c4ab5c6472b18" name="a9b6672d56734dd78fe2c4ab5c6472b18"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9b6672d56734dd78fe2c4ab5c6472b18">&#9670;&nbsp;</a></span>send_native_handle()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ipc::transport::Native_socket_stream::Impl::send_native_handle </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a>&#160;</td>
          <td class="paramname"><em>hndl_or_null</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="namespaceipc_1_1util.html#ae0be7edba7e30ffa3f8b742af621f2ab">util::Blob_const</a> &amp;&#160;</td>
          <td class="paramname"><em>meta_blob</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *&#160;</td>
          <td class="paramname"><em>err_code</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">hndl_or_null</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
    <tr><td class="paramname">meta_blob</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
    <tr><td class="paramname">err_code</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00239">239</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<a id="a4706d150ea840300dd23edbf71ed64b4" name="a4706d150ea840300dd23edbf71ed64b4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4706d150ea840300dd23edbf71ed64b4">&#9670;&nbsp;</a></span>sync_connect()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ipc::transport::Native_socket_stream::Impl::sync_connect </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespaceipc_1_1transport.html#a33de1c256addb3964b839dc2dd407d24">Shared_name</a> &amp;&#160;</td>
          <td class="paramname"><em>absolute_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *&#160;</td>
          <td class="paramname"><em>err_code</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">absolute_name</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
    <tr><td class="paramname">err_code</td><td>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a> counterpart. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00189">189</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

<p class="reference">References <a class="el" href="native__socket__stream_8cpp_source.html#l00089">ipc::transport::Native_socket_stream::sync_connect()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1Native__socket__stream_1_1Impl_a4706d150ea840300dd23edbf71ed64b4_cgraph.svg" width="579" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="a33231b969171a9103cd0a319ea10278b" name="a33231b969171a9103cd0a319ea10278b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a33231b969171a9103cd0a319ea10278b">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
          <td>(</td>
          <td class="paramtype">std::ostream &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html">Native_socket_stream::Impl</a> &amp;&#160;</td>
          <td class="paramname"><em>val</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Prints string representation of the given <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html" title="Internal, non-movable pImpl implementation of Native_socket_stream class.">Native_socket_stream::Impl</a> to the given <code>ostream</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to write. </td></tr>
    <tr><td class="paramname">val</td><td>Object to serialize. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>os</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00225">225</a> of file <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a9d006ccbd86681405447a5f2033ad2ca" name="a9d006ccbd86681405447a5f2033ad2ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d006ccbd86681405447a5f2033ad2ca">&#9670;&nbsp;</a></span>m_rcv_sync_io_adapter</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::optional&lt;<a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__receiver.html">sync_io::Async_adapter_receiver</a>&lt;decltype(<a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885">m_sync_io</a>)&gt; &gt; ipc::transport::Native_socket_stream::Impl::m_rcv_sync_io_adapter</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Null until PEER state, this handles ~all receive-ops logic in that state. </p>
<p ><a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__sender.html" title="Internal-use type that adapts a given PEER-state sync_io::Native_handle_sender or sync_io::Blob_sende...">sync_io::Async_adapter_sender</a> adapts any <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__handle__receiver.html" title="A documentation-only concept defining the behavior of an object that is the sync_io-pattern counterpa...">sync_io::Native_handle_receiver</a> and makes available ~all necessary async-I/O <a class="el" href="classipc_1_1transport_1_1Native__handle__receiver.html" title="A documentation-only concept defining the behavior of an object capable of reliably/in-order receivin...">Native_handle_receiver</a> APIs. So in PEER state we forward ~everything to this guy.</p>
<h3>Creation</h3>
<p >See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ad4689db8dfd0be14695e93d8760b23ed" title="Null until PEER state, this handles ~all send-ops logic in that state.">m_snd_sync_io_adapter</a> &ndash; same stuff.</p>
<h3>Destruction</h3>
<p >See <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#ad4689db8dfd0be14695e93d8760b23ed" title="Null until PEER state, this handles ~all send-ops logic in that state.">m_snd_sync_io_adapter</a> &ndash; same stuff. </p>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00453">453</a> of file <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html">native_socket_stream_impl.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00072">Impl()</a>.</p>

</div>
</div>
<a id="ad4689db8dfd0be14695e93d8760b23ed" name="ad4689db8dfd0be14695e93d8760b23ed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad4689db8dfd0be14695e93d8760b23ed">&#9670;&nbsp;</a></span>m_snd_sync_io_adapter</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::optional&lt;<a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__sender.html">sync_io::Async_adapter_sender</a>&lt;decltype(<a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885">m_sync_io</a>)&gt; &gt; ipc::transport::Native_socket_stream::Impl::m_snd_sync_io_adapter</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Null until PEER state, this handles ~all send-ops logic in that state. </p>
<p ><a class="el" href="classipc_1_1transport_1_1sync__io_1_1Async__adapter__sender.html" title="Internal-use type that adapts a given PEER-state sync_io::Native_handle_sender or sync_io::Blob_sende...">sync_io::Async_adapter_sender</a> adapts any <a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__handle__sender.html" title="A documentation-only concept defining the behavior of an object that is the sync_io-pattern counterpa...">sync_io::Native_handle_sender</a> and makes available ~all necessary async-I/O <a class="el" href="classipc_1_1transport_1_1Native__handle__sender.html" title="A documentation-only concept defining the behavior of an object capable of reliably/in-order sending ...">Native_handle_sender</a> APIs. So in PEER state we forward ~everything to this guy.</p>
<h3>Creation</h3>
<p >By its contract, this guy's ctor will handle what it needs to, as long as <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a4a7ab0a981614724b559b38634634d8a" title="Single-thread worker pool for all internal async work in both directions.">m_worker</a> (to which it stores a pointer) has been <code>.start()</code>ed by that time, and <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885" title="The core Native_socket_stream engine, implementing the sync_io pattern (see util::sync_io doc header)...">m_sync_io</a> (to which it stores... ditto) has been <code>.replace_event_wait_handles()</code>ed as required.</p>
<h3>Destruction</h3>
<p >By its contract, this guy's dtor will handle what it needs to, as long as <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a4a7ab0a981614724b559b38634634d8a" title="Single-thread worker pool for all internal async work in both directions.">m_worker</a> (to which it stores a pointer) has been <code>.stop()</code>ed by that time, and any queued-up (ready to execute) handlers on it have been <code>Task_enginer::poll()</code>ed-through by that time as well. </p>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00438">438</a> of file <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html">native_socket_stream_impl.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00072">Impl()</a>.</p>

</div>
</div>
<a id="a8e3d15efe152af3d5de7bed2a094b885" name="a8e3d15efe152af3d5de7bed2a094b885"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8e3d15efe152af3d5de7bed2a094b885">&#9670;&nbsp;</a></span>m_sync_io</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1transport_1_1sync__io_1_1Native__socket__stream.html">sync_io::Native_socket_stream</a> ipc::transport::Native_socket_stream::Impl::m_sync_io</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The core <code><a class="el" href="classipc_1_1transport_1_1Native__socket__stream.html" title="Implements both Native_handle_sender and Native_handle_receiver concepts by using a stream-oriented U...">Native_socket_stream</a></code> engine, implementing the <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> pattern (see <a class="el" href="namespaceipc_1_1util_1_1sync__io.html" title="Contains common code, as well as important explanatory documentation in the following text,...">util::sync_io</a> doc header). </p>
<p >See our class doc header for overview of how we use it (the aforementioned <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> doc header talks about the <code><a class="el" href="namespaceipc_1_1transport_1_1sync__io.html" title="sync_io-pattern counterparts to async-I/O-pattern object types in parent namespace ipc::transport.">sync_io</a></code> pattern generally).</p>
<p >Thus, <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885" title="The core Native_socket_stream engine, implementing the sync_io pattern (see util::sync_io doc header)...">m_sync_io</a> is the synchronous engine that we use to perform our work in our asynchronous boost.asio loop running in thread W (<a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a4a7ab0a981614724b559b38634634d8a" title="Single-thread worker pool for all internal async work in both directions.">m_worker</a>) while collaborating with user thread(s) a/k/a thread U. (Recall that the user may choose to set up their own event loop/thread(s) &ndash; boost.asio-based or otherwise &ndash; and use their own equivalent of an <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885" title="The core Native_socket_stream engine, implementing the sync_io pattern (see util::sync_io doc header)...">m_sync_io</a> instead.)</p>
<h3>Order subtlety versus <code>m_worker</code></h3>
<p >When constructing <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885" title="The core Native_socket_stream engine, implementing the sync_io pattern (see util::sync_io doc header)...">m_sync_io</a>, we need the <code>Task_engine</code> from <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a4a7ab0a981614724b559b38634634d8a" title="Single-thread worker pool for all internal async work in both directions.">m_worker</a>. On the other hand tasks operating in <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a4a7ab0a981614724b559b38634634d8a" title="Single-thread worker pool for all internal async work in both directions.">m_worker</a> access <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885" title="The core Native_socket_stream engine, implementing the sync_io pattern (see util::sync_io doc header)...">m_sync_io</a>. So in destructor it is important to <code>m_worker.stop()</code> explicitly, so that the latter is no longer a factor. Then when automatic destruction occurs in the opposite order of creation, the fact that <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a8e3d15efe152af3d5de7bed2a094b885" title="The core Native_socket_stream engine, implementing the sync_io pattern (see util::sync_io doc header)...">m_sync_io</a> is destroyed before <a class="el" href="classipc_1_1transport_1_1Native__socket__stream_1_1Impl.html#a4a7ab0a981614724b559b38634634d8a" title="Single-thread worker pool for all internal async work in both directions.">m_worker</a> has no bad effect. </p>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00419">419</a> of file <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html">native_socket_stream_impl.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00033">Impl()</a>.</p>

</div>
</div>
<a id="a4a7ab0a981614724b559b38634634d8a" name="a4a7ab0a981614724b559b38634634d8a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4a7ab0a981614724b559b38634634d8a">&#9670;&nbsp;</a></span>m_worker</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">boost::movelib::unique_ptr&lt;flow::async::Single_thread_task_loop&gt; ipc::transport::Native_socket_stream::Impl::m_worker</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Single-thread worker pool for all internal async work in both directions. </p>
<p >Referred to as thread W in comments. See doc header impl section for discussion.</p>
<p >Ordering: Must be either declared after mutex(es), or <code>.stop()</code>ed explicitly in dtor: Thread must be joined, before mutex possibly-locked-in-it destructs.</p>
<p >Why is it wrapped in <code>unique_ptr</code>? As of this writing the only reason is release() needs to be able to <code>move()</code> it to a temporary stack object before destroying it outright. </p>

<p class="definition">Definition at line <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html#l00401">401</a> of file <a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html">native_socket_stream_impl.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html#l00033">Impl()</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>transport/detail/<a class="el" href="detail_2native__socket__stream__impl_8hpp_source.html">native_socket_stream_impl.hpp</a></li>
<li>transport/detail/<a class="el" href="detail_2native__socket__stream__impl_8cpp_source.html">native_socket_stream_impl.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Apr 11 2025 20:02:27 for Flow-IPC by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
